package com.toe.order.webapi.repository;

import com.toe.pojo.vo.order.OrderGoodsDetailsVO;
import com.toe.pojo.vo.order.OrderGoodsSimpleVO;

import java.util.List;

public interface IOrderGoodsRedisRepository {

    /**
     * 商品详情信息的key
     */
    String KEY_ORDER_GOODS_DETAILS = "order:goods:details:";

    /**
     * 商品订单基本信息的key
     */
    String KEY_ORDER_GOODS_SIMPLE = "order:goods:simple:";

    /**
     * 判断是否存在id对应的订单详情信息的缓存数据
     * @param orderId 订单id
     * @return 存在则返回true,否则返回false
     */
    boolean hasDetailsData(Long orderId);

    /**
     * 判断是否存在用户id对应的订单基本信息的缓存数据
     * @param userId 用户id
     * @return 存在则返回true,否则返回false
     */
    boolean hasUserSimpleData(Long userId);

    /**
     * 向缓存中写入某id对应的空数据(null), 此方法主要用于解决缓存穿透问题
     * @param orderId 订单id
     */
    void saveDetailsEmptyValue(Long orderId);

    /**
     * 向缓存中写入某用户id对应的空数据(null), 此方法主要用于解决缓存穿透问题
     * @param userId 用户id
     */
    void saveSimpleEmptyValue(Long userId);

    /**
     * 将订单详情信息保存到缓存
     * @param orderGoods
     */
    void saveDetailsValue(OrderGoodsDetailsVO orderGoods);

    /**
     * 将订单基本信息信息保存到缓存
     * @param listOrderSimple
     */
    void saveSimpleValue(List<OrderGoodsSimpleVO> listOrderSimple);

    /**
     * 删除订单
     * @param orderId
     */
    void deleteDetailsValue(Long orderId);

    /**
     * 得到该id的订单详情信息
     * @param orderId
     * @return
     */
    OrderGoodsDetailsVO getOrderDetails(Long orderId);

    /**
     * 得到该id的订单基本信息
     * @param orderId
     * @return
     */
    List<OrderGoodsSimpleVO> getOrderSimple(List<Long> orderId);

}
